/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import clinicanutricao.Paciente;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import observer.Observador;

/**
 *
 * @author Kdc
 */
public class Pacientes {

    private static List pacientes;
    private ArrayList<Observador> observers;

    public Pacientes() {

        pacientes = new ArrayList<Paciente>();
        observers = new ArrayList<Observador>();
        leitura();
    }

    public void grava() {
        try {
            FileOutputStream fo = new FileOutputStream("src/serializados/Pacientes.dat");
            ObjectOutputStream oo = new ObjectOutputStream(fo);
            oo.writeObject(pacientes);
            oo.close();
            System.out.println("Dados gravados com sucesso");

            //notificar Observadores
            notificarObservadadores();

        } catch (Exception e) {
            System.err.println("Erro ao serializar " + e.getMessage());
        }
    }

    public void leitura() {
        try {
            File arq = new File("src/serializados/Pacientes.dat");
            FileInputStream fi = new FileInputStream(arq.getAbsolutePath());
            ObjectInputStream oi = new ObjectInputStream(fi);
            pacientes = (ArrayList) oi.readObject();
            oi.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public Paciente buscarPacientePorNome(String pNome) {

        Paciente retorno = null;
        for (int i = 0; i < pacientes.size(); i++) {
            Paciente l = (Paciente) pacientes.get(i);
            if (l.getNome().toLowerCase().equals(pNome.toLowerCase())) {
                retorno = l;
                break;
            }
        }
        return retorno;
    }

    public Paciente buscarPacientePorParteDeNome(String pNome) {

        Paciente retorno = null;
        for (int i = 0; i < pacientes.size(); i++) {
            Paciente l = (Paciente) pacientes.get(i);
            if (l.getNome().toLowerCase().contains(pNome.toLowerCase())) {
                retorno = l;
                break;
            }
        }
        return retorno;
    }

    public ArrayList<Paciente> getPacientes() {
        return (ArrayList<Paciente>) pacientes;
    }

    public void adiciona(Paciente p) {
        pacientes.add(p);
        grava();
    }

    public void excluir(Paciente p) {
        pacientes.remove(p);
        grava();
    }

    public void registrarObservador(Observador o) {

        observers.add(o);

    }

    public void removerObservador(Observador o) {

        int i = observers.indexOf(o);
        if (i >= 0) {
            observers.remove(o);
        }

    }

    public void notificarObservadadores() {

        for (int i = 0; i < observers.size(); i++) {
            System.out.println("Notificando Observador " + i);
            Observador ob = observers.get(i);
            ob.atualizar();
        }
    }

}
